iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
1

剛深入解構第三層的原理,接下來可以聊聊第三層最常見的應用-ping,ping可以說是網路工程師最常用到的工具,沒有之一,ping是基於ICMP,也就是第三層IP層header裡的protocol == 1,那ping可以做什麼呢?既然ping是基於第三層的應用,那他肯定和路由有關,當我們在ping後面的參數放上地址,就能測試對方和本地的主機是不是相通的,如下所示
https://ithelp.ithome.com.tw/upload/images/20200918/20130271MxwR6cgHvE.png
第一個64 bytes代表傳送ping封包的大小,74.125.24.105代表藉由DNS server所取得的Google IP,icmp_seq代表發送的順序,用來區別同個packet ID的時候,ttl則是ip header的TIME_TO_LIVE,time則是代表從發送出去到接收過了多少毫秒

我們用我們的網路分析腳本看一下能print出什麼訊息
首先,第二層和第三層的header長度分別為14和20,加起來就是34,icmp的header是8,所以我們取的icmp header段是packet[34:42],icmp_header裡有五個資料
icmp_type, code, checksum, packetid, seq = struct.unpack('BbHHh' , icmp_header)

  • icmp_type:常見的有0和8,0代表response,8代表request
  • Code: 一般為0
  • checksum:檢驗錯誤
  • packetid:代表icmp應用封包的唯一ID,和ip_header的checksum不同
  • seq:用以區分同個pocketid但是不同順序
#> ping 172.18.0.3 -c 1
Source Mac: 02:42:ac:12:00:03 Destination Mac: 02:42:ac:12:00:02 Protocol: IPv4 Version: 4 Type of Service: 0 Packet ID: 54951 TTL: 63 Protocol: ICMP Source IP: 172.17.0.5 Destination IP: 172.18.0.3 ICMP Type: 8 Packet ID: 14336 Seq: 256  # ping request,所以ICMP Type = 8
Source Mac: 02:42:ac:11:00:05 Destination Mac: 02:42:ac:11:00:02 Protocol: IPv4 Version: 4 Type of Service: 0 Packet ID: 42293 TTL: 63 Protocol: ICMP Source IP: 172.18.0.3 Destination IP: 172.17.0.5 ICMP Type: 0 Packet ID: 14336 Seq: 256  # ping response,所以ICMP Type = 0

詳見函數_handleICMPPacket,在系列的repo裡https://github.com/kaichiachen/pytcpdump/blob/master/utils/sniffer.py


上一篇
Day07 解析第二層及第三層的封包結構
下一篇
Day09 聊聊ICMP的應用 - traceroute
系列文
那些年還給老師的TCP/IP五層結構 - 用Python進行網路封包分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言